package com.mastercard.assets.web.struts.actions;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.mastercard.assets.jpa.TblAlerta;
import com.mastercard.assets.jpa.TblNivel;
import com.mastercard.assets.jpa.TblNotificacion;
import com.mastercard.assets.jpa.TblRole;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.NotificacionForm;
import com.mastercard.assets.web.util.to.UserLogin;

public class EditarNotificacionBuscarReg
	extends
		Action
{
	public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
	{
		HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
		
		// obtiene el regId
		String regIdS = request.getParameter( "cveNotificacion" ) ;
		
		int i = 0 ;
		
		// en caso de no null
		if( regIdS != null )
		{
			// trata de convertir
			try
			{
				i = Integer.parseInt( regIdS ) ;
				
				if( i < 1 )
				{
					// en caso de error
					user.setNextWorkArea( "/CalcularListaCatalogosNotificaciones.do" ) ;
					
					user.setMessageError( MCUtil.messages.getString( "com.mastercard.assets.web.modules.catalogos.notificaciones.errors.CveNotificacionWrong" , regIdS ) ) ;
					
				  	return mapping.findForward( "success" ) ;
				}
			}catch( Exception e )
			{
				
				// en caso de error
				user.setNextWorkArea( "/CalcularListaCatalogosNotificaciones.do" ) ;
				
				user.setMessageError( MCUtil.messages.getString( "com.mastercard.assets.web.modules.catalogos.notificaciones.errors.CveNotificacionWrong" , regIdS ) ) ;
				
			  	return mapping.findForward( "success" ) ;
			}
		}
		
		TblNotificacion res = MasterCardDAO.findNotificacionById( i ) ;
		
		// forma el form
		NotificacionForm f = new NotificacionForm( ) ;
		
		int cveRoleReq = -1 ;
		
		try
		{
			cveRoleReq = Integer.parseInt( request.getParameter( "cveRole" ) ) ;
		}catch( Exception e )
		{
			
		}
		
		f.setCveNotificacion( res.getCveNotificacion( ) ) ;
		f.setCveAlerta( res.getTblAlerta( ).getCveAlerta( ) ) ;
		f.setCveNivel( ( ( res.getTblNivel( ) != null ) ? res.getTblNivel( ).getCveNivel( ) : 0 ) ) ;
		f.setCveRole( res.getTblRole( ).getCveRole( ) ) ;
		f.setMail( ( ( res.getEmail( ) != null ) ? res.getEmail( ) : "" ) ) ;
		f.setTipo( res.getTipo( ) ) ;
		f.setTipoNotificacion( res.getTipoNotificacion( ) ) ;
		
		request.setAttribute( "EditarNotificacionEditarForm" , f ) ;
		
//		// en caso de que se cumpla, guarda el WorkArea
//		user.setNextWorkArea( "/WEB-INF/pages/WorkArea/EditarCategoria.jsp" ) ;
//		
		
		// en caso de que se cumpla
		// calcula las alertas activas
		List< TblAlerta > alertas = MasterCardDAO.getAllActiveAlertas( ) ;
		
		// en caso de que no haya alertas
		if( alertas == null || alertas.size( ) == 0 )
		{
			user.setMessageError( "com.mastercard.assets.web.modules.catalogos.notificaciones.errors.NoHayAlertas" ) ;
			
                        MasterCardDAO.closeEntityManager( ) ;
			return mapping.findForward( "error" ) ;
		}
		
		// en caso de una alerta solamente
		if( alertas.size( ) == 1 )
		{
			// guarda el numero de alerat
			f.setCveAlerta( alertas.get( 0 ).getCveAlerta( ) ) ;
		}
		
		request.setAttribute( "ActiveAlerts" , alertas ) ;
		
		// calcula los roles
		List< TblRole > roles= MasterCardDAO.getAllActiveRoles( ) ;
		
		// en caso de que no haya
		if( roles == null || roles.size( ) == 0 )
		{
			user.setMessageError( "com.mastercard.assets.web.modules.catalogos.notificaciones.errors.NoHayRoles" ) ;
			
                        MasterCardDAO.closeEntityManager( ) ;
			return mapping.findForward( "error" ) ;
		}
		
		// en caso d que haya un solo rol
		if( roles.size( ) == 1 )
		{
			// toma el role
			TblRole role = roles.get( 0 ) ;
			
			int cveRole = role.getCveRole( ) ;
			
			// guarda
			f.setCveRole( cveRole ) ;
			
			// toma los nieles del role
			List< TblNivel > niveles = MasterCardDAO.getAllActiveLevelsFromRole( cveRole ) ;
			
			// guarda en el request
			request.setAttribute( "ActiveLevels" , niveles ) ;
			
			// en caso de que haya un solo nivel
			if( niveles != null && niveles.size( ) == 1 )
				f.setCveNivel( niveles.get( 0 ).getCveNivel( ) ) ;
			else
				f.setCveNivel( 0 ) ;
		}
		
		// revisa el cveRoleReg
		if( cveRoleReq > 0 )
		{
			// toma los nieles del role
			List< TblNivel > niveles = MasterCardDAO.getAllActiveLevelsFromRole( cveRoleReq ) ;
			
			// guarda en el request
			request.setAttribute( "ActiveLevels" , niveles ) ;
			
			f.setCveRole( cveRoleReq ) ;
			
			// en caso de que haya un solo nivel
			if( niveles != null && niveles.size( ) == 1 )
				f.setCveNivel( niveles.get( 0 ).getCveNivel( ) ) ;
			else
				f.setCveNivel( 0 ) ;
		}
		// en caso de que cveRole venga mayor de 1
		else if( f.getCveRole( ) > 0 )
		{
			// toma los nieles del role
			List< TblNivel > niveles = MasterCardDAO.getAllActiveLevelsFromRole( f.getCveRole( ) ) ;
			
			// guarda en el request
			request.setAttribute( "ActiveLevels" , niveles ) ;
			
			// en caso de que haya un solo nivel
			if( niveles != null && niveles.size( ) == 1 )
				f.setCveNivel( niveles.get( 0 ).getCveNivel( ) ) ;
			else
				f.setCveNivel( 0 ) ;
		}
		
		// calcula los roles activos
		request.setAttribute( "ActiveRoles" , roles ) ;
		
		user.setMessageError( "" ) ;
		

		
		
		
		user.clearMessageError( ) ;
		
                MasterCardDAO.closeEntityManager( ) ;
                if( user.getIdioma( ) == 0 ) {
                    return mapping.findForward( "success" ) ;
                } else
                    return mapping.findForward( "successEng" ) ;
	  	
	}
	
}
